package br.urca.controller;

import javax.inject.Inject;

import br.com.caelum.vraptor.Controller;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.controller.IndexController;
import br.com.caelum.vraptor.validator.Validator;
import br.urca.dao.AlunoDAO;
import br.urca.interceptor.InterceptResource;
import br.urca.model.Aluno;
import br.urca.session.UsuarioLogado;
import br.urca.validator.AlunoValidator;

@Controller
@InterceptResource
public class AlunosController {
	
	private AlunoDAO alunoDAO;
	private UsuarioLogado mUsuarioLogado;
	private Result result;
	private Validator validator;
	
	public AlunosController() { }
	
	@Path("/aluno/atualizacao")
	public void atualizacao() {
		this.result.include("aluno", mUsuarioLogado.getAluno().getAluno());
	}
	
	@Inject
	public AlunosController(AlunoDAO alunoDAO, UsuarioLogado mUsuarioLogado,
			Validator validator, Result result) {
		this.alunoDAO = alunoDAO;
		this.mUsuarioLogado = mUsuarioLogado;
		this.validator = validator;
		this.result = result;
	}
	
	
	public void salvar(Aluno aluno) {
		try {
			//Atribui a data de nascimento ao objeto a ser atualizado
			aluno.setDtNascimento(mUsuarioLogado.getAluno().getAluno().getDtNascimento());
			
			AlunoValidator.validade(aluno, validator);			
			
			aluno = removeMascaras(aluno); 	
			this.alunoDAO.salvar(aluno);
			this.mUsuarioLogado.getAluno().setAluno(aluno);
			
			result.include("mensagem", "Dados atualizados com sucesso!")
					.redirectTo(IndexController.class).index();
		
		} catch (Exception e) {
			this.result
					.include("aluno", aluno)
					.include(
							"mensagem",
							"Desculpe mas houve uma falha ao tentar salvar!"
									+ " Verifique as informações digitadas e tente novamente!" 
									+ e.getMessage());
			validator.onErrorForwardTo(this).atualizacao();
		}
	}
	
	public Aluno removeMascaras(Aluno aluno) {
		String cep = aluno.getCep().replaceAll("-", "");
		aluno.setCep(cep);
		String cpf = aluno.getCpf();
		cpf = cpf.replaceAll("-", "").replace(".", "");
		aluno.setCpf(cpf);
		String fone = aluno.getTelefone().replaceAll(" ", "")
				.replace("(", "")
				.replace(")", "")
				.replace("-", "");
		aluno.setTelefone(fone);
		return aluno;
	}

}
